#include <stdio.h>
# include <string.h>
#define TRUE 0
#define FALSE -1

int stackinoutright(char* s);


//** 注意题目要求初态和终态均为空
int main(int argc, char* argv[])
{
	printf("%d    %d     %d\n", stackinoutright("IIOOIIO"), stackinoutright("IIIOOIOOIIIIOOOIOO"),  stackinoutright("IIIIIIIIOOIOOOO"));

	return 0;
}

int stackinoutright(char* s){
	char ch;//用于存储遍历的字符串
	int count=0;//简化计算，是I就加一，是O就建议。省去出入栈操作
	
	while(*s!='\0'){
		ch=*s;
		if(ch=='I') count++;
		if(ch=='O') count--;
		if(count<0) return FALSE;
		s++;//指针后移
	}
	if(count == 0) return TRUE;
	return FALSE;
}
/*
设计一个函数
	int stackinoutright(char inoutop[]) 
假设以I和O分别表示入栈和出栈。栈的初态和终态均为空，入栈和出栈的操作序列可表示为I和O组成的一个字符串，即为inoutop字符串。
该函数就是用于判定这个序列的操作是否合法，如果序列合法则返回0，否则为非法序列，返回-1

如下的main函数执行后
int main(int argc, char* argv[])
{
	printf("%d    %d     %d\n", stackinoutright("IIOOIIO"), stackinoutright("IIIOOIOOIIIIOOOIOO"),  stackinoutright("IIIIIIIIOOIOOOO"));

	return 0;
}
执行的结果为
-1    0     -1

*/